﻿#ifndef PST_TEXTFILEREADER_H
#define PST_TEXTFILEREADER_H

#include <QObject>
#include <QList>
#include <QHash>
#include <QVector>
#include <vtkObject.h>
#include <vtkSmartPointer.h>
#include "InfomationCurve2DBasical.h"
#include "TextArrayMetaHander.h"

class vtkTable;
class vtkPlotLine;
class vtkPoints;
class vtkDelimitedTextReader;

namespace pst
{
    class TextFileReader : public QObject
    {
        Q_OBJECT
    public:
        explicit TextFileReader(QObject* parent = Q_NULLPTR);
        ~TextFileReader();

    public:
        void SetFileName(const QString& fileName);
        QString GetFileName();

        // json中的文件类型result_type
        void setFileDealType(int type);
        int getFileDealType();

        // 0为标量，1为实部虚部， 2为幅度相位
        void setFileComponentType(int type);
        int getFileComponentType();

        bool update();

        vtkTable* getOutputTable();

    public:
    private:
        bool ReadTxtToVTKTable(const QString& filename);

        bool parseTitleName(vtkTable* inputTable, QVector<QString>& eachColNameOfKey,
            QVector<QString>& eachColUnitOfKey, QVector<QString>& eachColNameOfValue,
            QVector<QString>& eachColUnitOfValue);

        // 根据数据类型（m_fileDealType和 m_fileComponentType） 扩展表格
        bool addMetaInfomation();
        void clearData();

        // TextArrayMetaStruct addArrayMetaStruct(const QString& filePath,
        //     int resultParaType, int resultDataType, const QString& dataGroupNam,
        //     int relatedScalarIndex, int relatedRealPartIndex, int relatedImagPartIndex,
        //     int relatedMagPartIndex, int relatedPhasePartIndex, const QString& unit, int keyValueType);

    private:
        QString m_fileName;
        // json中的文件类型result_type
        // 是文件的类型
        // 体电场分布（0）面电场分布（1） 点电场（探针点）（2） 表面场分布（3）表面电流密度（4） 空间电势分布（5）
        // 表面电势分布（6） 方向图（7）  S参数（8）  驻波比（9）  电压（10）
        // 电流（11） 附着点路径（14）   面电势分布（15） 干扰关联矩阵（12）  SAR（13）
        int m_fileDealType;
        // 0为标量，1为实部虚部， 2为幅度相位
        int m_fileComponentType;

        QStringList m_geometryFileName;

        QString m_textHeaderComment;               // 表头注释，如版本等，文件的第0行
        QString m_textHeader;                      // 表头，文件的第一行
        vtkSmartPointer<vtkTable> m_originalTable; // 读取的原始表格
        // vtkSmartPointer<vtkTable> m_expandedTable; // 扩展后的表格

        QString m_errorMessage;

        // QVector<QString> m_eachColNameOfKey;         // 每一Key列的列名字
        // QVector<QString> m_eachColUnitOfKey;         // 每一Key列的单位
        // QVector<QVector<double>> m_eachColDataOfKey; // 每一key列包含的数据
        // int m_keyLenth;                              // 每个key应该有的的长度

        // QVector<QString> m_eachColGroupNameOfValue; // 按组名划分列，每一列数据的组名（一组可能包含多列）

        // QVector<QString> m_eachColNameOfValue;         // 每一value列的列名字
        // QVector<QString> m_eachColUnitOfValue;         // 每一value列的单位
        // QVector<QVector<double>> m_eachColDataOfValue; // 每一value列包含的数据
        // int m_valueLenth;                              // 每个value应该有的的长度, 即每个key对应的value有多少个
    };
} // namespace pst

#endif
